// 函数声明
// function fn(x: number, y: number): number {
//   return x + y
// }

// 函数表达式:
// let fn: (x: number, y: number) => number
// fn = (x: number, y: number): number => {
//   return x + y
// }

// fn(1, 123)

//可选参数
// y?:数据类型, 表示y是一个可选参数
// 注意: 可选参数,必须写在必填参数的后面
// function fn(x: number, y?: number): number {
//   return x + 2
// }

// fn(1)

// 参数默认值
// 注意: 如果一个形参有默认值,那么相当于这个形参就是可选参数
// function fn(x: number, y: number = 9): number {
//   return x + 2
// }

// fn(1)

// // 剩余参数:
// function fn(x: number, ...args): number {
//   let test: any[] = args
//   return x
// }

// fn(1, 2, 3, false, '123')

// 函数重载,可以有更清晰的提示
// function reverse(x: number): number
// function reverse(x: string): string
// function reverse(x: number | string): number | string | void {
//   if (typeof x === 'number') {
//     return Number(x.toString().split('').reverse().join(''))
//   } else if (typeof x === 'string') {
//     return x.split('').reverse().join('')
//   }
// }

// reverse('123')

interface Ifn {
  (x: number, y: number): number
}
// let fn: (x: number, y: number) => number
let fn: Ifn
fn = (x: number, y: number): number => {
  return x + y
}
